From 9568674036933068b65d976f1a7200405c5104a8 Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Fri, 6 Jan 2023 10:05:50 -0700 Subject: [PATCH] another use of potentially invalid waypt field. (#974) * another use of potentially invalid waypt field. * fix erroneous comparison of optional waypt values. --- defs.h | 3 +++ gtrnctr.cc | 4 ++-- trackfilter.cc | 7 +++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/defs.h b/defs.h index 0b50d1f95..e159b4319 100644 --- a/defs.h +++ b/defs.h @@ -323,6 +323,9 @@ struct bounds { #define WAYPT_GET(wpt,member,def) (((wpt)->wpt_flags.member) ? ((wpt)->member) : (def)) #define WAYPT_UNSET(wpt,member) wpt->wpt_flags.member = 0 #define WAYPT_HAS(wpt,member) ((wpt)->wpt_flags.member) +#define WAYPT_EQUAL(wpta,wptb,member) (((wpta)->wpt_flags.member && (wptb)->wpt_flags.member && \ + ((wpta)->member == (wptb)->member)) || \ + (!(wpta)->wpt_flags.member && !(wptb)->wpt_flags.member)) /* * This is a waypoint, as stored in the GPSR. It tries to not diff --git a/gtrnctr.cc b/gtrnctr.cc index 81f1dcee6..b9ff1b816 100644 --- a/gtrnctr.cc +++ b/gtrnctr.cc @@ -192,11 +192,11 @@ GtrnctrFormat::gtc_waypt_pr(const Waypoint* wpt) if (wpt->cadence) { gtc_write_xml(0, "%d\n", wpt->cadence); } - if (wpt->speed || wpt->power) { + if (WAYPT_HAS(wpt, speed) || wpt->power) { gtc_write_xml(1, "\n"); gtc_write_xml(1, "\n"); /* see http://www8.garmin.com/xmlschemas/ActivityExtensionv2.xsd */ - if (wpt->speed) { + if (WAYPT_HAS(wpt, speed)) { gtc_write_xml(0, "%.3f\n", wpt->speed); } if (wpt->power) { diff --git a/trackfilter.cc b/trackfilter.cc index f60371f26..4482afe35 100644 --- a/trackfilter.cc +++ b/trackfilter.cc @@ -903,12 +903,11 @@ bool TrackFilter::trackfilter_points_are_same(const Waypoint* wpta, const Waypoi std::abs(wpta->latitude - wptb->latitude) < .00001 && std::abs(wpta->longitude - wptb->longitude) < .00001 && std::abs(wpta->altitude - wptb->altitude) < 20 && - (WAYPT_HAS(wpta,course) == WAYPT_HAS(wptb,course)) && - (wpta->course == wptb->course) && - (wpta->speed == wptb->speed) && + WAYPT_EQUAL(wpta, wptb, course) && + WAYPT_EQUAL(wpta, wptb, speed) && (wpta->heartrate == wptb->heartrate) && (wpta->cadence == wptb->cadence) && - (wpta->temperature == wptb->temperature); + WAYPT_EQUAL(wpta, wptb, temperature); } void TrackFilter::trackfilter_segment_head(const route_head* rte) -- 2.30.2